package cn.wizzer.app.user.modules.services;

import cn.wizzer.app.user.modules.models.UserSign;
import cn.wizzer.app.user.modules.models.vo.UserSignVO;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;

import java.math.BigDecimal;
import java.util.List;

public interface UserSignService extends BaseService<UserSign> {
    /**
     * 第一天 1 Coin 第二天 2coin 第三天 3coin 第四天5 coin 第五天 8coin
     * 连续五天之后就要从第一天开始
     * 如果中断了，也是从第一天累积
     * <p>
     * 实现
     * 查询今天的记录，
     * 如果今天已经有了，就不要签到了
     * 查询昨天的纪录，如果是1 则 现在应该是2 ，如果是2那么应该是3，如果昨天没记录，那么就是1
     * 对就是这样，很简单
     * <p>
     * 加限制条件，必须要有充值过的人才能签到
     *
     * @param userId
     */
    void sign(String userId);

    /**
     * 兑换成USD 100 BALL COIN =  1 USD
     *
     * @param userId
     * @param amount
     */
    void exchange(String userId, BigDecimal amount);


    /**
     * 根据日期查询记录
     *
     * @param userId
     * @param date   date格式要转换成 yyyy-MM-dd
     * @return
     */
    UserSign fetchByDate(String userId, String date);

    /**
     * 查看最近五条签到
     *
     * @param userId
     * @return
     */
    List<UserSign> list5(String userId, String type);

    /**
     * 查看最近一条 ,查询余额
     *
     * @param userId
     * @return
     */
    UserSign last(String userId);

    /**
     * 查询用户五天内的签到情况 及余额
     *
     * @param userId
     * @return
     */
    UserSignVO querySign(String userId);

    /**
     * 根据用户ID查询积分记录 分页
     *
     * @param userId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Pagination pageList(String userId, Integer pageNumber, Integer pageSize);


    /**
     * 后台签到列表
     *
     * @param type
     * @param searchKeyword
     * @param searchDate
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Pagination listPage(String conditionData, String type, String searchKeyword, String[] searchDate, int pageNumber, int pageSize);


    /**
     * 根据搜索条件查询
     *
     * @param conditionData
     * @param type
     * @param searchKeyword
     * @param searchDate
     * @return
     */
    BigDecimal searchSum(String conditionData, String type, String searchKeyword, String[] searchDate);
}
